上一篇提到如何使用Angular內建的管道。Angular內建的管道固然很實用,但是不能涵蓋全部的使用情境,如果沒有涵蓋到,就自己來定義一個管道吧
heros = [
{ name: '大雄', score: 0 },
{ name: '靜香', score: 90 },
{ name: '胖虎', score: 50 },
{ name: '小夫', score: 70 },
{ name: '小杉', score: 100 },
]
現在要來做一個轉換的管道來顯示考試結果
ng generate pipe <pipeName>
建立score管道
ng generate pipe score
Angular CLI 建立管道的時候,會自動宣告新建立的管道。(如果沒有可以自行宣告)app.module.ts
@NgModule({
imports: [BrowserModule, FormsModule],
declarations: [AppComponent, HelloComponent, ScorePipe], // 宣告score pipe
bootstrap: [AppComponent]
})
接下來來到score pipescore.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'score'
})
export class ScorePipe implements PipeTransform {
transform(value: any, args?: any): any {
return null;
}
}
這是一個新建立好,空白的管道
@Pipe({
name: 'score'
})
@pipe裡面有一個name
的屬性,指定管道的名字。Angular CLI在建立的時候,會自動填上名字。如果不喜歡可以在這裡修改。
再來看到管道的轉換內容:
export class ScorePipe implements PipeTransform {
transform(value: any, args?: any): any {
return null;
}
}
可以看到有一個transform
的方法轉換資料,此方法接受兩個參數:value
,args
return
返回處理後的結果。因此就來寫一個簡單的分數轉換:
export class ScorePipe implements PipeTransform {
transform(value: any, args?: any): any {
if (value >= 60 && value < 80) {
return "低分及格";
} else if (value > 80) {
return "高分";
} else {
return "不及格";
}
}
}
使用簡單的if判斷式,判斷結過之後,將轉換的結果return返回。
回到html頁面,套上score pipe看看結果
<div>
<h2>自訂管道</h2>
<span *ngFor="let hero of heros">
<p>{{hero.name}}</p>
<p>原始分數:{{hero.score}}</p>
<p>轉換結果:{{hero.score | score}}</p>
================
</span>
</div>
一個簡單的轉換分數的管道就完成了!
今天的範例內容可以在這裡看到:範例內容
今天學到的事情有: